home *** CD-ROM | disk | FTP | other *** search
/ Just Call Me Internet / Just Call Me Internet.iso / archives / com / internet / sting / sting.lzh / STING / dev-kit / header / layer.h < prev    next >
C/C++ Source or Header  |  1997-09-23  |  5KB  |  135 lines

  1. /*
  2.  *      layer.h             (c) Peter Rottengatter  1996
  3.  *                              perot@pallas.amp.uni-hannover.de
  4.  *
  5.  *      Include this file to provide high level protocol interfacing to STinG
  6.  */
  7.  
  8. #ifndef STING_LAYER_H
  9. #define STING_LAYER_H
  10.  
  11. #ifndef MODULE_DRIVER
  12. #define MODULE_DRIVER    "MODULE_LAYER"
  13. #endif
  14.  
  15.  
  16.  
  17. /*--------------------------------------------------------------------------*/
  18.  
  19.  
  20. #define  MAX_HANDLE    64    /* Number of handles assigned by PRTCL_request */
  21.  
  22.  
  23.  
  24. /*--------------------------------------------------------------------------*/
  25.  
  26.  
  27. /*
  28.  *   High level protocol module descriptor.
  29.  */
  30.  
  31. typedef  struct lay_desc {
  32.     char             *name;          /* Name of layer                       */
  33.     char             *version;       /* Version of layer in xx.yy format    */
  34.     uint32           flags;          /* Private data                        */
  35.     uint16           date;           /* Compile date in GEMDOS format       */
  36.     char             *author;        /* Name of programmer                  */
  37.     int16            stat_dropped;   /* Statistics of dropped data units    */
  38.     struct lay_desc  *next;          /* Next layer in driver chain          */
  39.  } LAYER;
  40.  
  41.  
  42.  
  43. /*--------------------------------------------------------------------------*/
  44.  
  45.  
  46. /*
  47.  *   CN functions structure for TCP and UDP
  48.  */
  49.  
  50. typedef  struct cn_funcs {
  51.     int16  cdecl  (* CNkick) (void *);
  52.     int16  cdecl  (* CNbyte_count) (void *);
  53.     int16  cdecl  (* CNget_char) (void *);
  54.     NDB *  cdecl  (* CNget_NDB) (void *);
  55.     int16  cdecl  (* CNget_block) (void *, void *, int16);
  56.     CIB *  cdecl  (* CNgetinfo) (void *);
  57.     int16  cdecl  (* CNgets) (void *, char *, int16, char);
  58.  } CN_FUNCS;
  59.  
  60.  
  61.  
  62. /*--------------------------------------------------------------------------*/
  63.  
  64.  
  65. /*
  66.  *   Module driver structure / functions
  67.  */
  68.  
  69. #ifndef MOD_DRIVER
  70. #define MOD_DRIVER
  71.  
  72. typedef  struct stx {
  73.     char *     module;      /* Specific string that can be searched for     */
  74.     char *     author;      /* Any string                                   */
  75.     char *     version;     /* Format `00.00' Version:Revision              */
  76.     void       cdecl  (* set_dgram_ttl) (IP_DGRAM *);
  77.     int16      cdecl  (* check_dgram_ttl) (IP_DGRAM *);
  78.     int16      cdecl  (* load_routing_table) (void);
  79.     int32      cdecl  (* set_sysvars) (int16, int16);
  80.     void       cdecl  (* query_chains) (void **, void **, void **);
  81.     int16      cdecl  (* IP_send) (uint32, uint32, uint8, uint16, uint8, uint8, uint16,
  82.                                    void *, uint16, void *, uint16);
  83.     IP_DGRAM * cdecl  (* IP_fetch) (int16);
  84.     int16      cdecl  (* IP_handler) (int16, int16 cdecl (*) (IP_DGRAM *), int16);
  85.     void       cdecl  (* IP_discard) (IP_DGRAM *, int16);
  86.     int16      cdecl  (* PRTCL_announce) (int16);
  87.     int16      cdecl  (* PRTCL_get_parameters) (uint32, uint32 *, int16 *, uint16 *);
  88.     int16      cdecl  (* PRTCL_request) (void *, CN_FUNCS *);
  89.     void       cdecl  (* PRTCL_release) (int16);
  90.     void *     cdecl  (* PRTCL_lookup) (int16, CN_FUNCS *);
  91.     int16      cdecl  (* TIMER_call) (void cdecl (*) (void), int16);
  92.     int32      cdecl  (* TIMER_now) (void);
  93.     int32      cdecl  (* TIMER_elapsed) (int32);
  94.     int32      cdecl  (* protect_exec) (void *, int32 cdecl (*) (void *));
  95.     int16      cdecl  (* get_route_entry) (int16, uint32 *, uint32 *, void **, uint32 *);
  96.     int16      cdecl  (* set_route_entry) (int16, uint32, uint32, void *, uint32);
  97.  } STX;
  98.  
  99. extern STX *stx;
  100.  
  101.  
  102. /*
  103.  *   Definitions of module driver functions for direct use
  104.  */
  105.  
  106. #define set_dgram_ttl(x)                 (*stx->set_dgram_ttl)(x)
  107. #define check_dgram_ttl(x)               (*stx->check_dgram_ttl)(x)
  108. #define load_routing_table()             (*stx->load_routing_table)()
  109. #define set_sysvars(x,y)                 (*stx->set_sysvars)(x,y)
  110. #define query_chains(x,y,z)              (*stx->query_chains)(x,y,z)
  111. #define IP_send(a,b,c,d,e,f,g,h,i,j,k)   (*stx->IP_send)(a,b,c,d,e,f,g,h,i,j,k)
  112. #define IP_fetch(x)                      (*stx->IP_fetch)(x)
  113. #define IP_handler(x,y,z)                (*stx->IP_handler)(x,y,z)
  114. #define IP_discard(x,y)                  (*stx->IP_discard)(x,y)
  115. #define PRTCL_announce(x)                (*stx->PRTCL_announce)(x)
  116. #define PRTCL_get_parameters(w,x,y,z)    (*stx->PRTCL_get_parameters)(w,x,y,z)
  117. #define PRTCL_request(x,y)               (*stx->PRTCL_request)(x,y)
  118. #define PRTCL_release(x)                 (*stx->PRTCL_release)(x)
  119. #define PRTCL_lookup(x,y)                (*stx->PRTCL_lookup)(x,y)
  120. #define TIMER_call(x,y)                  (*stx->TIMER_call)(x,y)
  121. #define TIMER_now()                      (*stx->TIMER_now)()
  122. #define TIMER_elapsed(x)                 (*stx->TIMER_elapsed)(x)
  123. #define protect_exec(x,y)                (*stx->protect_exec)(x,y)
  124. #define get_route_entry(a,b,c,d,e)       (*stx->get_route_entry)(a,b,c,d,e)
  125. #define set_route_entry(a,b,c,d,e)       (*stx->set_route_entry)(a,b,c,d,e)
  126.  
  127. #endif /* MOD_DRIVER */
  128.  
  129.  
  130.  
  131. /*--------------------------------------------------------------------------*/
  132.  
  133.  
  134. #endif /* STING_LAYER_H */
  135.